package com.pmt.feedplayer.core

import com.pmt.feedplayer.data.TranslationResult
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.SharedFlow
import java.util.concurrent.ConcurrentLinkedQueue

/**
 * Android平台字幕管理器实现
 */
class AndroidSubtitleManager : SubtitleManager {
    private val subtitleQueue = ConcurrentLinkedQueue<TranslationResult>()
    private var subtitleDelay = 0L // 默认无延迟
    private val _translationResults = MutableSharedFlow<TranslationResult>()
    
    override val translationResults: SharedFlow<TranslationResult>
        get() = _translationResults
    
    override fun addTranslationResult(result: TranslationResult) {
        // 添加到字幕队列
        subtitleQueue.add(result)
        
        // 发送结果流更新
        // 注意：这里需要在协程中发送，但由于这是接口实现，实际使用时需要在协程作用域中调用
        // 可以在TranslationController中处理
        
        // 限制队列大小，避免内存占用过多
        if (subtitleQueue.size > 100) {
            subtitleQueue.poll() // 移除最旧的字幕
        }
    }
    
    override fun getCurrentSubtitle(currentTime: Long): TranslationResult? {
        val adjustedTime = currentTime - subtitleDelay
        
        // 查找当前时间应该显示的字幕
        val currentSubtitle = subtitleQueue.lastOrNull { 
            it.timestamp <= adjustedTime && it.timestamp + it.durationMs > adjustedTime
        }
        
        return currentSubtitle
    }
    
    override fun setSubtitleDelay(delayMs: Long) {
        this.subtitleDelay = delayMs
    }
    
    override fun clearSubtitles() {
        subtitleQueue.clear()
    }
    
    /**
     * 获取字幕历史列表
     */
    fun getSubtitleHistory(): List<TranslationResult> {
        return subtitleQueue.toList()
    }
    
    /**
     * 更新字幕显示持续时间
     */
    fun updateSubtitleDuration(durationMs: Long) {
        // 可以根据需要更新所有字幕的显示持续时间
    }
    
    /**
     * 调整字幕同步
     */
    fun adjustSubtitleSync(offsetMs: Long) {
        subtitleDelay += offsetMs
    }
    
    /**
     * 预加载字幕（如果有本地字幕文件）
     */
    fun preloadSubtitles(subtitlePath: String) {
        // 实现从字幕文件加载字幕的逻辑
        // 支持常见的字幕格式如SRT、VTT等
    }
}